<?php
// +---------------------------------- 前后端联调对象 ------------------------------------
namespace app\dto;

/**
 * 统一响应对象R
 * 用于前后端统一的消息响应处理
 */
class R
{
    /**
     * 成功状态码
     */
    private static $SUCCESS = 1;
    
    /**
     * 失败状态码
     */
    private static $ERROR = 0;
    
    /**
     * 返回成功消息
     * 
     * @param string $msg 成功消息
     * @param mixed $data 数据
     * @return array
     */
    public static function ok($msg = '操作成功', $data = null)
    {
        return self::result(self::$SUCCESS, $msg, $data);
    }
    
    /**
     * 返回失败消息
     * 
     * @param string $msg 失败消息
     * @param mixed $data 数据
     * @return array
     */
    public static function error($msg = '操作失败', $data = null)
    {
        return self::result(self::$ERROR, $msg, $data);
    }
    
    /**
     * 自定义返回结果
     * 
     * @param int $code 状态码
     * @param string $msg 消息
     * @param mixed $data 数据
     * @return array
     */
    public static function result($code, $msg, $data = null)
    {
        $result = [
            'code' => $code,
            'msg' => $msg
        ];
        
        if ($data !== null) {
            $result['data'] = $data;
        }
        
        return $result;
    }
    
    /**
     * 发送验证码响应
     * 
     * @return array
     */
    public static function codeSent()
    {
        return self::ok('验证码已发送到您的邮箱');
    }
    
    /**
     * 验证码错误响应
     * 
     * @return array
     */
    public static function codeError()
    {
        return self::error('验证码错误或已过期');
    }
    
    /**
     * 注册成功响应
     * 
     * @return array
     */
    public static function registerSuccess()
    {
        return self::ok('注册成功');
    }
    
    /**
     * 登录成功响应
     * 
     * @param mixed $token 令牌
     * @param mixed $userInfo 用户信息
     * @return array
     */
    public static function loginSuccess($token, $userInfo = null)
    {
        return self::ok('登录成功', [
            'token' => $token,
            'userInfo' => $userInfo
        ]);
    }
}